#pragma once
#include <iostream>
#include <cstddef>
namespace qing {
	/* ANSI是WINDOWS操作系统默认的编码格式。 */
	
	/*

	ANSI是一种字符代码，通常使用0x00~0x7f范围的1个字节来表示1个英文字符，超出此范围的使用0x80~0xFFFF来编码，即扩展的ASCII编码。

	不同系统下的表示
	
	简体中文Windows操作系统：ANSI编码代表GB2312编码。

	繁体中文Windows操作系统：ANSI编码代表Big5。

	日文Windows操作系统：ANSI编码代表JIS编码。
	
	*/

	class ansi{

		public:

			/*

			什么是GB18030？

			
			GB18030是中华人民共和国国家标准所规定的变长多字节字符集，全称《信息技术中文编码字符集》。以下是关于它的详细介绍：
			
			1.特点
			
			编码方式灵活：采用变长多字节编码，每个字可以由1个、2个或4个字节组成。这种灵活的编码方式使得GB18030能够适应不同字符的编码需求，提高了编码效率。
			
			编码空间大：最多可定义161万个字符，庞大的编码空间为收录大量汉字和其他字符提供了可能。

			兼容性强：对GB2312和GBK基本完全兼容，支持Unicode（ISO/IEC 10646）的所有码位。这使得在处理已有的GB2312和GBK编码的文档时，能够实现平滑过渡，降低了系统改造和升级的成本。

			汉字收录丰富：最新的GB18030-2022版本共收录汉字87,887个，包括简体和繁体汉字，还支持中国少数民族现行文字，以及日韩等国的象形文字，覆盖了中国绝大部分人名、地名用生僻字
			
			以及科技等专业领域的用字，满足了公安、地图、古籍出版等行业的应用需求。

			2.版本演进

			GB18030-2000
			
			全称为《信息技术 汉字编码字符集 基本集的扩充》，于2000年发布。

			此版本在GBK的基础上增加了CJK统一汉字扩充A的汉字，
			
			规定了27533个常用非汉字符号和汉字的编码，包括部首和部件，
			
			是国家强制执行的标准，所有在市场上销售的产品都必须遵循这一标准。

			GB18030-2005
			
			该版本在GB18030-2000的基础上，增加了42711个汉字以及我国少数民族文字的编码，

			这部分内容是推荐性的，意味着并非所有产品都需要强制支持，但仍然鼓励其采用，

			GB18030-2005成为了部分强制性标准，自发布之日起，取代了GB18030-2000,

			产品在基本满足汉字编码需求的同时，可根据自身需要选择性地支持新增的字符集。

			GB18030-2022
			
			当前执行标准为GB18030-2022,于2023年8月1日正式实施，是对GB18030标准的第二次修订。

			现行版本共收录汉字87887个，由包含了简体和繁体汉字，支持中国少数民族现行文字，

			包含了日韩等国的象形文字，还包括了214个康熙部首（KANGXI RADICALS）。

			覆盖中国绝大部分人名、地名用生僻字以及文献、科技等专业领域的用字，满足公安、

			地图、古籍出版等行业的应用需求。

			与GB2312和GBK完全兼容，兼容所有Unicode字符。


			GB2312作为i中文编码字符集的国家标准，以其强大的编码能力、广泛的兼容性和丰富的汉字收录，

			为中文信息处理提供了坚实的基础，推动了中文信息技术的发展和应用。

			*/
			static int size_gb18030(unsigned char *c, size_t maxLen);

			/*

			什么是GB2312？


			GB2312全称《信息交换用汉字编码字符集·基本集》，是我国早期的一种简体汉字编码标准，

			以下是关于它的详细介绍：

			1.发布与实施

			GB2312于1980年发布，次年5月实施，是中国大陆最早的中文字符集之一，
			
			填补了当时中文编码的空白，为中文信息处理奠定了基础。

			2.字符收录

			共收录6763个常用简体汉字和682个非汉字图形符号，如拉丁字母、希腊字母、日文假名等，

			满足了日常99%的汉字使用需求。

			3.编码方式

			采用双字节编码，每个汉字或字符由两个字节表示。
			
			第一个字节是高位字节，范围是A1-F7（其中字符区A1-F9,汉字区B0-F7）;

			第二个字节是低位字节，范围是A1-FE。

			4.排列规则

			汉字按照汉语拼音字母顺序排列，同音字按照笔画顺序排列;

			非汉字图形符号按照一定的规则排列。

			5.兼容性

			与ASCII码兼容，当第一个字节为00时，第二个字节为00-7F时，表示一个ASCII字符，

			保证了在只包含ASCII字符的文本中，GB2312编码与ASCIIv编码的一致性。

			6.优缺点

			优点：支持常用中文字符，兼容性强，被广泛用于操作系统、编程语言和数据库等领域，

			编码规则简单，易于理解和使用，且能节省存储空间。

			缺点：容量有限，无法涵盖所有中文字符，特别是一些生僻字和外来词汇，
			
			并且不支持繁体字编码。


			总之，GB2312作为我国早期的汉字编码标准，虽有其局限性，
			
			但在中文信息处理发展史上有着重要地位。

			随着技术发展，它逐渐被更全面的编码标准所取代。

			*/

			static int size_gb2312(unsigned char first_byte);


			/*

			问：请告诉我关于 GBK 的事情。

			答：以下是对GBK编码的简要说明，针对程序员的优化逻辑总结：

			GBK 核心特点

			1.起源

			中国国家标准，扩展自GB2312（覆盖6763个简体汉字）。

			兼容 GB2312,新增约2.1万个汉字（含繁体、生僻字、符号）。

			2.编码规则

			双字节编码：每个字符占1~2字节（首字节高位为 1 表示双字节）。

			总字符数约 3 万，覆盖大部分中文场景

			3.与 Unicode 的关系

			GBK 是地区性标准，Unicode 是国际统一标准。

			GBK 字符可映射到 Unicode（如 UTF-8），但需转换表支持。

			编程场景注意事项

			1.编码识别

			文件读写时需显式指定“GBK”编码，避免默认编码（如 UTF-8）导致的乱码。

			示例（Python）：

			with open("file.txt", "r", encoding="gbk") as f:
			    content = f.read()

			2.转换问题

			与其他编码（如 UTF-8）互转时，可能丢失无法映射的字符。

			建议使用“iconv”或编程语言内置库（如 Python 的“encode/decode”。

			3.现代替代方案

			优先使用 UTF-8：国际兼容、无国界限制、支持多语言混合。

			保留 GBK 的场景：兼容旧系统、特定中文政府/行业标准需求。

			常见问题排查

			乱码根源：编码声明与文件实际编码不一致。

			调试建议：

			1.用“hexdump”或二进制编辑器确认文件真实编码

			2.使用“chardet”（Python 库）自动探测编码类型。

			如需深入讨论具体问题（如编码转换代码示例），可随时告知！
			
			（如有建议或不满，欢迎联系 Qing：1776177662@qq.com）

			*/


			/* 非法的长度 */
			class WrongLength: public std::runtime_error {
				public:
					WrongLength(): std::runtime_error("") {}
			};
	};
}
